λ stack runghc
mainが読み込まれる
GPT-4.icon
stack runghc は、Haskell スクリプトを直接実行するための Stack コマンドです。Haskell のスクリプトファイルをコンパイルせずにそのまま実行できるため、簡単なスクリプトやテストコードを試す際に便利です。
---
stack runghc の概要
stack runghc は、GHCi(GHCインタプリタ) のスクリプト実行モードを Stack 経由で利用するものです。通常の runghc コマンドとは異なり、Stack のプロジェクト環境や依存関係を考慮した状態で実行されます。
---
使い方
基本構文:
code:bash
例: Haskell スクリプトを実行
シンプルなスクリプト実行:
code:bash
stack runghc script.hs
script.hs を実行します。
引数を渡す:
code:bash
stack runghc script.hs arg1 arg2
スクリプトに arg1 と arg2 を引数として渡します。
対話的な利用
stack runghc はインタラクティブな利用には向いていません。その場合は、stack ghci を利用するのが適切です。
---
stack runghc の動作の仕組み
1. 依存関係を解決:
プロジェクトの stack.yaml に記載されている依存関係が解決されます。
必要に応じて、GHC がインストールされます。
2. スクリプトを直接実行:
GHC のインタプリタ(runghc)を利用してスクリプトを解釈し、即座に実行します。
3. プロジェクト環境の利用:
Stack を介して実行するため、スクリプトはプロジェクト環境内で定義された依存ライブラリや GHC バージョンを利用します。
---
stack runghc のメリット
1. 環境の一貫性:
Stack プロジェクト内の依存ライブラリや設定をそのまま利用できるため、依存関係の異なる複数のプロジェクトで問題が起きにくい。
2. スクリプトのテストに最適:
コンパイルせずに直接実行できるため、小規模なスクリプトやユーティリティの試行に便利。
3. 柔軟性:
他の Haskell スクリプトやモジュールをインポートして、より複雑なスクリプトを実行可能。
---
オプション
--resolver:
特定の Stackage Snapshot を指定してスクリプトを実行します。
code:bash
stack runghc --resolver lts-20.10 script.hs
--package:
必要な依存パッケージを一時的に指定して実行します。
code:bash
stack runghc --package text script.hs
---
注意点
1. パフォーマンスの制限:
スクリプトはコンパイルせずに解釈されるため、実行速度はコンパイルされたバイナリよりも遅いです。
2. 環境外での実行:
stack runghc は Stack 環境に依存するため、他の Haskell ツール(例: cabal)との互換性がない場合があります。
3. 大規模なコードには不向き:
長い実行時間が必要なコードや複数ファイルにまたがるコードの場合、stack build を利用してコンパイルするほうが効率的です。
---
実行例
簡単なスクリプト(hello.hs)
code:haskell
main :: IO ()
main = putStrLn "Hello, World!"
実行:
code:bash
stack runghc hello.hs
出力:
Hello, World!
外部ライブラリを使用したスクリプト
code:haskell
{-LANGUAGE OverloadedStrings #-} import Data.Text (Text, pack, toUpper)
main :: IO ()
main = putStrLn $ show $ toUpper $ pack "hello, stack!"
実行:
code:bash
stack runghc --package text script.hs
出力:
"HELLO, STACK!"
---
関連コマンド
stack ghci:
対話的に Haskell のコードを試す場合に使用します。
stack build:
コンパイルが必要な場合はこちらを利用します。
runghc:
Stack を使わずに GHC 環境で直接スクリプトを実行します。
---
これが stack runghc の基本的な使い方と解説です。他に知りたいことがあれば教えてください!